package br.com.dlm.simuladoitil.controle;

import android.content.Context;

import java.util.List;

import br.com.dlm.simuladoitil.basicas.Alternativa;
import br.com.dlm.simuladoitil.basicas.Categoria;
import br.com.dlm.simuladoitil.basicas.Questao;
import br.com.dlm.simuladoitil.util.ArquivoJSON;

public class GerenciadorConteudo {

    private RepositorioLocal local;
    private RepositorioNuvem nuvem;

    private ArquivoJSON arquivoJSON;

    public GerenciadorConteudo(Context context) {
        super();

        local = new RepositorioLocal(context);
        nuvem = new RepositorioNuvem();
    }

    public List<Categoria> listarCategorias() {
        return local.listarCategorias();
    }

    // VERIFICA E ATUALIZA A BASE LOCAL CASO SEJA NECÉSSARIO.
    public void atualizarConteudoLocal() {
        arquivoJSON = nuvem.obterArquivoJSON();

        if (arquivoJSON != null) {
            List<Categoria> categoriasLocal = local.listarCategorias();
            List<Categoria> categoriasNuvem = arquivoJSON.categorias;

            for (Categoria categoriaAux : categoriasNuvem) {
                if (!categoriasLocal.contains(categoriaAux)) {
                    local.inserirCategoria(categoriaAux);
                } else {
                    for (Questao questaoAux : categoriaAux.questoes) {
                        if (!categoriaAux.questoes.contains(questaoAux)) {
                            local.inserirQuestao(questaoAux, categoriaAux);
                        } else {
                            for (Alternativa alternativaAux : questaoAux.alternativas) {
                                if (!questaoAux.alternativas.contains(alternativaAux)) {
                                    local.inserirAlternativa(alternativaAux, questaoAux);
                                } else {
                                    if (!alternativaAux.equals(local.consultarAlternativaPorId(alternativaAux.id))) {
                                        local.alterarAlternativa(alternativaAux, questaoAux);
                                    }
                                }
                            }
                            if (!questaoAux.equals(local.consultarQuestaoPorId(questaoAux.id))) {
                                local.alterarQuestao(questaoAux, categoriaAux);
                            }
                        }
                    }
                    if (!categoriaAux.equals(local.consultarCategoriaPorId(categoriaAux.id))) {
                        local.alterarCategoria(categoriaAux);
                    }
                }
            }
        }
    }
}
